﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Serviços;
using TCC_Hotel.Serviços.BDServices;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.OtherServices;

namespace TCC_Hotel.Apresentacao.Estoque
{
    public partial class EditarQuantidade : System.Web.UI.Page
    {
        
        EstoqueService servico = new EstoqueService();
        FornecedorService servico_fornecedor = new FornecedorService();
        LoginService servico_Login = new LoginService();

        /// <summary>
        /// Carregamento da página
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();

            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Editar_Estoque)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }
                      

            if (!IsPostBack)
            {
                if (Request.Params["id"] == null)
                {
                    //Redireciona para a pagina inicial
                    Response.Redirect("~/");
                }

                //Recupera o parametro da URL
                int ID = Convert.ToInt32(Request.Params["id"]);
                
                //chama o serviço que busca no banco de dados o funcionario correspondente
                Produto produto = servico.RecuperarDetalhesProdutoEstoque(ID);

                //Carrega os fornecedores cadastrados
                Fornecedor fornecedor = servico_fornecedor.ListarFornecedoresCache().Where(i => i.ID == produto.IDFornecedor).FirstOrDefault();

                if (produto != null)
                {
                    txtNomeProduto.Text = produto.NomeProduto;
                    txtQuantidade.Text = Convert.ToString(produto.QuantidadeEstoque);
                    txtTelefone.Text = fornecedor.TelefoneFornecedor;
                    txtFornecedor.Text = fornecedor.NomeFornecedor;
                    txtEmailFornecedor.Text = fornecedor.EmailFornecedor;
                    ckbPermitirEmail.Checked = produto.PermitirEnvioEmail;
                }
            }
        }

        /// <summary>
        /// Tenta editar o produto no banco de dados
        /// </summary>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            int nova_Quantidade = 0;
            //Recupera o parametro da URL
            int ID = Convert.ToInt32(Request.Params["id"]);

            ComumServices comum = new ComumServices();

            //preenche a lista obrigatoria para verificar se todos os campos obrigatorios foram preenchidos
            List<string> listaObrigatoria = new List<string>() 
            { 
                txtQuantidade.Text               
            
            };

            //verifica se algum campo obrigatorio nao foi preenchido
            if (!comum.ValidaCamposObrigatorios(listaObrigatoria))
            {
                MensagemJS("ERRO: Campo obrigatório em branco");
                return;
            }
           
            //monta o objeto produto
            try
            {

              
                nova_Quantidade = Convert.ToInt32(txtQuantidade.Text);

                //chama o serviço que edita a quantidade de um produto no banco de dados
                if (servico.EditarQuantidadeProduto(ID, nova_Quantidade))
                {
                    MensagemJS("Produto editado com sucesso!");
                    HttpContext.Current.Cache.Remove("Lista_Produtos_Estoque");
                }
                else
                {
                    MensagemJS("ERRO: Produto com esse nome já existente");
                    return;
                }

            }
            catch (Exception)
            {
                //se ocorrer exceção lanca mensagem para o usuário
                MensagemJS("ERRO: Campo(s) com valor(es) inválido(s)");
                return;

            }

        }

        /// <summary>
        /// Evento de click do botao voltar 
        /// </summary>
        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            int telaAnterior = Convert.ToInt32(Request.Params["tela"]);

            //Redireciona para a pagina anterior
            if (telaAnterior == 1)
            {
                Response.Redirect("~/Apresentacao/Estoque/ListarEstoque.aspx");
            }
            else if (telaAnterior == 2)
            {
                Response.Redirect("~/Apresentacao/Estoque/ListarProdutosFaltantes.aspx");
            }

        }
        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "error",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }

    }
}